// 日期前置位填充
function padZero(num) {
  return num < 10 ? '0' + num : num;
}

// 格式化日期
function formatDate(date) {
  const year = date.getFullYear().toString(); // 获取年份的后两位
  const month = padZero(date.getMonth() + 1); // 月份从0开始，所以需要加1
  const day = padZero(date.getDate());
  const hours = padZero(date.getHours());
  const minutes = padZero(date.getMinutes());
  const seconds = padZero(date.getSeconds());
  
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

// 获取当前时间
export function getCurrentTime() {
  const now = new Date();
  return formatDate(now);
}

// 获取本周一零点时间
export function getMondayMidnight() {
  const now = new Date();
  const dayOfWeek = now.getDay(); // 返回的是今天是星期几，0表示星期日，1表示星期一...
  const diffToMonday = (dayOfWeek === 0 ? 6 : dayOfWeek - 1) * 24 * 60 * 60 * 1000; // 计算与本周一相差的毫秒数
  const monday = new Date(now.getTime() - diffToMonday);
  monday.setHours(0, 0, 0, 0); // 设置到当天零点
  return formatDate(monday);
}

// 获取当天零点时间
export function getTodayMidnight() {
  const now = new Date();
  // 设置时间为当天的零点
  const todayMidnight = new Date(now.getFullYear(), now.getMonth(), now.getDate());
  return formatDate(todayMidnight);
}

// 处理自定义时间串
export function formatDateString(dateString) {
  // 使用 Date 构造函数解析日期字符串
  const date = new Date(dateString);

  // 确保日期有效
  if (isNaN(date.getTime())) {
      throw new Error('Invalid date string');
  }

  // 获取年份的后两位
  const year = date.getFullYear().toString();
  // 月份从0开始，所以需要加1，并且可能需要补零
  const month = padZero(date.getMonth() + 1);
  // 日可能需要补零
  const day = padZero(date.getDate());
  // 小时、分钟和秒数
  const hours = padZero(date.getHours());
  const minutes = padZero(date.getMinutes());
  const seconds = padZero(date.getSeconds());

  // 返回格式化的日期字符串
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
// 计算天数差
export function getDaysDifference(dateStr1, dateStr2) {
  // 解析日期字符串
  const date1 = new Date(dateStr1.replace(/-/g, '/'));
  const date2 = new Date(dateStr2.replace(/-/g, '/'));

  // 确保日期有效
  if (isNaN(date1.getTime()) || isNaN(date2.getTime())) {
      throw new Error('Invalid date string');
  }

  // 计算两个日期之间的毫秒差
  const diffInMs = Math.abs(date2 - date1);

  // 将毫秒差转换为天数
  const diffInDays = diffInMs / (1000 * 60 * 60 * 24);

  // 返回天数差（可以使用 Math.floor 或 Math.ceil 来获取整数天数）
  return Math.floor(diffInDays);
}

// 日期格式转换
export const formatISODate = (isoDate) => {
  let date = new Date(isoDate);
  let year = date.getFullYear();
  let month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始，所以加1
  let day = String(date.getDate()).padStart(2, '0');
  let hours = String(date.getHours()).padStart(2, '0');
  let minutes = String(date.getMinutes()).padStart(2, '0');
  let seconds = String(date.getSeconds()).padStart(2, '0');
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
// 日期格式转换
export const formatISODateToString = (isoDate) => {
  let date = new Date(isoDate);
  let year = date.getFullYear();
  let month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始，所以加1
  let day = String(date.getDate()).padStart(2, '0');
  return `${year}-${month}-${day}`;
}

// 日期格式转换
export const formatUTCTime = (utcDate) => {
  const date = new Date(utcDate);
  // 格式化日期为 YYYY-MM-DD
  const year = date.getUTCFullYear();
  const month = String(date.getUTCMonth() + 1).padStart(2, '0');
  const day = String(date.getUTCDate()).padStart(2, '0');
  // 直接更新原始对象的 time 属性值
  return `${year}-${month}-${day}`;
}